package cn.tedu.charging.device.service.impl;

import cn.tedu.charging.device.dao.repository.DeviceRepository;
import cn.tedu.charging.device.pojo.po.ChargingStationPO;
import cn.tedu.charging.device.service.WarmUpService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class WarmUpServiceImpl implements WarmUpService {
    @Autowired
    private DeviceRepository deviceRepository;
    @Override
    public void runWarmUpOnce() {
        //1.判断当前是否已经存在预热数据
        Boolean exists=deviceRepository.geoStationsExists();
        //判断如果不存在,我继续完成预热流程
        if (!exists){
            log.debug("当前缓存geo数据不存在,所以执行预热");
            //2.为了组织循环执行,需要total总条数 batch每批条数
            Long total=deviceRepository.countStations();
            Long batch=2l;
            //3.计算循环的总次数
            Long loopNum=total%batch==0?total/batch:total/batch+1;
            log.debug("数据总条数{},每批条数{},循环总次数{}",total,batch,loopNum);
            //4.定义循环
            for(long i=0l;i<loopNum;i++){
                //4.1 select * from station limit start,rows
                Long start=i*batch;
                //4.2有了分页参数 每次读limit start,rows
                List<ChargingStationPO> pos=deviceRepository.getStationsPage(start,batch);
                if(pos!=null&&pos.size()>0){
                    //2.将数据写入一个geo集合 为后续管理场站查询
                    deviceRepository.saveGeos(pos);
                }
            }
        }
       /* //1.读取所有的station数据 从仓储层获取的一定是stationPO集合
        List<ChargingStationPO> pos= deviceRepository.getAllStations();
        //判断非空 非空则写入redis
        if(pos!=null&&pos.size()>0){
            //2.将数据写入一个geo集合 为后续管理场站查询
            deviceRepository.saveGeos(pos);
        }*/
    }
}
